home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / gnome-games-data / gnome_sudoku / dialog_swallower.py < prev    next >
Encoding:
Python Source  |  2009-04-14  |  2.0 KB  |  77 lines

  1. # -*- coding: utf-8 -*-
  2. import gtk, gobject
  3.  
  4. # Convenience library for a new kind of UI -- for e.g. this game, we
  5. # don't really want to have dialogs. Nonetheless, it's convenient to
  6. # design dialogs in glade and run them in the standard manner... So we
  7. # create a new "dialog" interface via a hidden notebook.
  8.  
  9. class SwappableArea (gtk.Notebook):
  10.  
  11.  
  12.     swallowed = {}
  13.     response = None
  14.     running = False
  15.  
  16.     
  17.     def __init__ (self,main_area):
  18.         gtk.Notebook.__init__(self)
  19.         self.set_show_tabs(False)
  20.         self.set_show_border(False)
  21.         self.main_page = self.append_page(main_area)
  22.  
  23.     def swallow_window (self, d):
  24.         child = d.child
  25.         d.remove(child)
  26.         return self.swallow_widget(child)
  27.         
  28.     def swallow_widget (self, w):
  29.         w.unparent()
  30.         return self.append_page(w)
  31.  
  32.     def response_cb (self, w, response, data=None):
  33.         gtk.main_quit()
  34.         self.response = response
  35.  
  36.     def swallow_dialog (self, d):
  37.         n = self.swallow_window(d)
  38.         self.swallowed[d] = n
  39.         self.set_current_page(n)
  40.         d.connect('response', self.response_cb)
  41.  
  42.     def run_dialog (self, d):
  43.         self.running = d
  44.         if not self.swallowed.has_key(d):
  45.             self.swallow_dialog(d)
  46.         self.set_current_page(self.swallowed[d])
  47.         try:
  48.             gtk.main()
  49.         except:
  50.             print 'Error in dialog!'
  51.             import traceback; traceback.print_exc()
  52.             print 'forge on fearlessly...'
  53.         self.set_current_page(self.main_page)
  54.         self.running = None
  55.         tmp_response = self.response
  56.         self.response = None
  57.         return tmp_response
  58.  
  59.         
  60.  
  61. if __name__ == '__main__':
  62.  
  63.     d = gtk.Dialog()
  64.     d.vbox.add(gtk.Label('Foo, bar, baz'))
  65.     d.vbox.show_all()
  66.     d.add_button(gtk.STOCK_CLOSE,gtk.RESPONSE_CLOSE)
  67.     import defaults
  68.     w = gtk.Window()
  69.     b = gtk.Button('show d'); b.show()
  70.     sa = SwappableArea(b)
  71.     sa.show()
  72.     w.add(sa)
  73.     b.connect_object('clicked', sa.run_dialog, d)
  74.     w.show()
  75.     gtk.main()
  76.     
  77.